package com.qdevelop.log;

import java.util.HashMap;
import java.util.Map;

import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;

import com.qdevelop.model.utils.QDevelop;
import com.qdevelop.model.utils.UtilsFactory;

@SuppressWarnings("unchecked")
public class QLog{
	
	private Logger log = Logger.getLogger("QDevelop");
	
	private Map<String,Logger> logCache = new HashMap();
	
	public QLog(){
		PropertyConfigurator.configure(UtilsFactory.propertiesUtils().toConfigPath("log4j.properties"));
	}
	
	private static QLog qlog = new QLog();
	
	public static QLog getInstance(){
		return qlog;
	}
	
	public void debug(Object msg){
		System.out.println(msg);
		log.debug(toSysLogInfo(msg));
	}
	
	public void logger(Object msg){
		System.out.println(msg);
		log.info(toSysLogInfo(msg));
	}
	public void logError(Object msg){
		System.out.println(msg);
		log.error(toSysLogInfo(msg));
	}
	
	public void logger(String type,Object msg){
		if(logCache.get(type)==null){
			logCache.put(type, Logger.getLogger(type));
		}
		System.out.println(msg);
		logCache.get(type).info(toSysLogInfo(msg));
	}
	
	public void logDebug(String type,Object msg){
		if(logCache.get(type)==null){
			logCache.put(type, Logger.getLogger(type));
		}
		System.out.println(msg);
		logCache.get(type).debug(toSysLogInfo(msg));
	}
	
	public void logInfo(String type,Object msg){
		if(logCache.get(type)==null){
			logCache.put(type, Logger.getLogger(type));
		}
		System.out.println(msg);
		logCache.get(type).info(toSysLogInfo(msg));
	}
	
	public void logError(String type,Object msg){
		if(logCache.get(type)==null){
			logCache.put(type, Logger.getLogger(type));
		}
		System.out.println(msg);
		logCache.get(type).error(toSysLogInfo(msg));
	}
	
	public void logWarn(String type,Object msg){
		if(logCache.get(type)==null){
			logCache.put(type, Logger.getLogger(type));
		}
		System.out.println(msg);
		logCache.get(type).warn(toSysLogInfo(msg));
	}
	private String toSysLogInfo(Object msg){
		return new StringBuffer().append("[").append(QDevelop.serverName).append("] ").append(msg).toString();
	}
	/**
	 * @param args
	 */
	public static void main(String[] args) {
	}

}
